<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>测试</title>
	</head>
	<body>
		<script type="text/javascript">
			let obj = {
				user: {
					name: "xiaoming"
				}
			};
			//此处仅为了演示引用的支持
			let str = "user.name+(3+2-5*0)+Math.pow(2,4)";
			//计算表达式，两个参数，表达式，作用域链
			console.log(myeval.run(str,
				[obj, window]));
			//等同于
			with(obj) {
				console.log(eval(str))
			}
			/**
			 * 自定义运算符，项目中需要把判断逻辑拼接成表达式，如a/b>0.1这种判断 
			 * 然后用eval来执行，但是浏览器原生的eval数字计算会产生丢失精度问题，比如0.1+0.2=0.300...4的情况
			 * 因为是事先拼接好的表达式，不能用四舍五入（四舍五入本身也会造成精度丢失），于是开发了这个插件
			 * 在解析表达式的同时，支持自定义操作符的实现
			 */
			//例如需要验证 药品购置费+医疗设备购置费=总支出,得到的字符串为
			str = "8496.1+8642.2==17138.3";
			console.log(eval(str)); //结果为false,因为小数点计算丢失了精度
			//+号运算符注册,依次类推，所有的运算符都可以被代替
			myeval.registerOperator({
				operator: "+",
				fun: function(a, b) {
					console.log(`收到了参数:${a}`);
					console.log(`收到了参数:${b}`);
					return a.add(b);
				}
			});
			console.log(myeval.run(str)); //结果为true，等同于myeval.run(myeval.compile(str))
		</script>
	</body>
</html>
